<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>完善表格：删除、复制</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #inputSec{
            width: 600px;
            display: flex;
            height: 20px;
            margin: 10px 0;
        }
        #inputSec label{
            font-size: 16px;
            line-height: 20px;
        }
        #inputSec input{
            width: 100px;
        }
        table{
            min-height: 10px;
            border-spacing: 0;
            border-collapse: collapse;
            width: 100%;
            table-layout: fixed;
        }
        table td{
            border: 1px solid blue;
            height: 40px;
            text-align: center;
            line-height: 40px;
        }
        #btn{
            padding: 0 5px;
        }
    </style>
</head>
<body>
    <section id='inputSec'>
        <label for="">请输入行数</label><input id='row' type="text">
        <label for="">请输入列数</label><input id='col' type="text">
        <button id='btn'>生成</button>
    </section>
    <div id="outputSec">
        <!-- <table>
            <tbody>
                <tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
            </tbody>
        </table> -->
    </div>

    <script>

        /* 自身写法 */

        // 获取元素
        var row = document.querySelector('#inputSec #row');
        var col = document.querySelector('#inputSec #col');
        var btn = document.querySelector('#btn');
        var outputSec = document.querySelector('#outputSec');


        // 绑定创建点击事件
        btn.onclick = function(){
            // 清空原表格
            outputSec.innerHTML = '';

            // 获取行列数
            var _row = row.value;
            var _col = col.value*1+2;   // 除去序号列和复制删除列

            // 创建table、tbody并先把tbody插入到table
            var table = document.createElement('table');
            var tbody = document.createElement('tbody');
            table.appendChild(tbody);

            // 生成表格

            // 行
            for(var i=0;i<_row;i++){
                var tr = document.createElement('tr');
                // 列
                for(var j=0;j<_col;j++){
                    var td = document.createElement('td');
                    tr.appendChild(td);
                }
                // 每列头个td添加序号
                tr.firstChild.innerText = '序号' + (i+1);
                tr.firstChild.id = (i+1);
                // 每列最后一个td添加复制删除按钮
                var copyBtn = document.createElement('button');
                copyBtn.className = 'copyBtn';
                copyBtn.innerText = '复制';
                var delBtn = document.createElement('button');
                delBtn.className = 'delBtn';
                delBtn.innerText = '删除';
                tr.lastChild.appendChild(copyBtn);
                tr.lastChild.appendChild(delBtn);
                // 生成的一整行tr插入到tbody
                tbody.appendChild(tr);
            }
            // 生成后的table整个插入到outputSec盒子
            outputSec.appendChild(table);


            // 复制：生成的行无法复制
            // 初步解决方法：生成后重新后获取复制和删除按钮，在内部再写一遍复制和删除，删除的同理【不推荐写法】
            /* var cpBtn = document.querySelectorAll('#copyBtn');
            cpBtn.forEach(function(item,index){
                item.onclick = function(){
                    var copyTr = item.parentElement.parentElement.cloneNode(true);
                    tbody.insertBefore(copyTr,item.parentElement.parentElement);
                }
            }); */
            document.addEventListener('click',function(e){
                // console.log(e.target);
                if(e.target.className == 'copyBtn'){
                    // 获取复制按钮
                    var cbtn = e.target;
                    // 复制整行
                    var copyTr = cbtn.parentElement.parentElement.cloneNode(true);
                    // 插入
                    tbody.insertBefore(copyTr,cbtn.parentElement.parentElement);
                }
            });

            // 删除：生成的行无法删除
            /* var deBtn = document.querySelectorAll('#delBtn');
            deBtn.forEach(function(item,index){
                item.onclick = function(){
                    var delTr = item.parentElement.parentElement;
                    delTr.remove();
                }
            }); */
            document.addEventListener('click',function(e){
                if(e.target.className == 'delBtn'){
                    // 获取删除按钮
                    var dbtn = e.target;
                    // 删除整行
                    var delTr = dbtn.parentElement.parentElement;
                    delTr.remove();

                }
            });
        }


        
    </script>
</body>
</html>